草庐IT

Java OutOfMemoryError 奇怪的行为

全部标签

c++ - 取消引用一个等于 nullptr 的指针是标准未定义的行为吗?

一位博客作者提出了关于空指针解引用的讨论:http://www.viva64.com/en/b/0306/我在这里提出了一些反驳论点:http://bit.ly/1L98GL4他引用标准的主要推理是这样的:The'&podhd->line6'expressionisundefinedbehaviorintheClanguagewhen'podhd'isanullpointer.TheC99standardsaysthefollowingaboutthe'&'address-ofoperator(6.5.3.2"Addressandindirectionoperators"):Theop

c++ - 如果更改 const 对象是未定义的行为,那么构造函数和析构函数如何使用写访问权限进行操作?

C++标准规定修改最初声明为const的对象是未定义的行为。那么构造函数和析构函数是如何运行的呢?classClass{public:Class(){Change();}~Class(){Change();}voidChange(){data=0;}private:intdata;};//later:constClassobject;//object.Change();-won'tcompileconst_cast(object).Change();//compiles,butit'sundefinedbehavior我的意思是构造函数和析构函数与调用代码做完全相同的事情,但允许它们更

c++ - 关于 std::less 行为的问题

那里发生了什么?#includenamespaceA{structClass{};}booloperator()(A::Class(),A::Class());return0;}这是编译好的。但如果我使用。#include我有错误:g++test.cc-otestInfileincludedfrom/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/include/g++-v4/bits/stl_tree.h:64:0,from/usr/lib/gcc/x86_64-pc-linux-gnu/4.5.2/include/g++-v4/set:60,fromlo

c++ - 带有字符串的奇怪 Qt 代码

我找到了我friend的Qt代码,他在两个QString上使用模运算符,如下所示:QStringresult=oneString%twoString;这是什么意思? 最佳答案 这只是连接QString的另一种(更有效的)方式,如themanual中所述。QStringBuilderusesexpressiontemplatesandreimplementsthe'%'operatorsothatwhenyouuse'%'forstringconcatenationinsteadof'+',multiplesubstringconca

c++ - 如何实现 std::advance 以更改迭代器类型的行为?

我们对std::advance的了解如下:templatevoidadvance(InputIterator&i,Distancen);目的将迭代器i推进n个元素。如果i是一个随机访问迭代器,函数使用一次operator+或operator-,否则函数重复使用递增或递减运算符(operator++或operator--)直到n个元素被递增。我的问题如下:std::advance是如何实现的,以便识别it是否是随机访问迭代器?它怎么知道它可以使用operator+而不是operator++? 最佳答案 通过iterator_trait

c++ - 具有继承的静态变量的行为

我问这个问题是为了讨论。假设我有流动的类层次结构classA{public:staticintvarr;}classB:publicA{}ClassC:publicA{}如果我创建Bb1,b2,b3;和Cc1,c2,c3;和Aa1,a2;的对象>1.varr是否会在上述所有对象之间共享,或者不同的对象会有单独的实例?2.如果b1对象改变了它会反射(reflect)给c1对象的值。 最佳答案 是的,它将在所有派生类(B,C)和基类(A)的所有实例中共享。只会为静态对象创建一个实例,并且在所有地方都会引用该对象。因此,如果您在一个地方进

c++ - 从堆栈地址形成指针范围是未定义的行为吗?

一些C或C++程序员惊讶地发现即使是storinganinvalidpointerisundefinedbehavior.但是,对于堆或堆栈数组,可以将地址存储在数组末尾之后,这样您就可以存储“结束”位置以供在循环中使用。但是从单个堆栈变量形成指针范围是否是未定义的行为,例如:charc='X';char*begin=&c;char*end=begin+1;for(;begin!=end;++begin){/*dosomething*/}虽然上面的例子没什么用,但如果某些函数需要一个指针范围,这可能很有用,而且你有一种情况,你只需要一个值来传递它。这是未定义的行为吗?

c++ - std::sort 具有相等整数的行为

当std::sort与相等的整数一起使用时,它的行为是什么?它会让它们保持相同的顺序还是只是做一些不可预测的事情? 最佳答案 std::sort不保留等效元素的顺序,std::stable_sort做。但是,如果是int,您将不会注意到差异,除非您使用一些非平凡的顺序,如下例所示:structhalf_less{booloperator()(inta,intb)const{return(a/2)Hereisanotherexample当std::stable_sort比std::sort更合适时

C++ 指针的打印值给出了奇怪的结果

当我编译并运行此C++代码时,我没有得到预期的输出。#includeusingnamespacestd;intmain(){int*i=newint;long*l=newlong;char*c=newchar[100];float*f=newfloat[100];cout在unix机器上我得到i0x967f008l0x967f018cf0x967f090在Windows机器上,c的值打印为一行随机字符。请有人解释为什么它没有正确打印char数组的指针。谢谢 最佳答案 operator对于std::ostream和std::wostr

c++ - const_cast 的未定义行为

我希望有人能准确阐明C++中未定义行为的含义。给定以下类定义:classFoo{public:explicitFoo(intValue):m_Int(Value){}voidSetValue(intValue){m_Int=Value;}private:Foo(constFoo&rhs);constFoo&operator=(constFoo&rhs);private:intm_Int;};如果我理解正确,下面代码中指向引用和指针的两个const_casts将删除Foo类型的原始对象的常量性,但是通过指针或引用将导致未定义的行为。intmain(){constFooMyConstFoo